package org.jeecg.modules.cusstyle.service.impl;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;

import org.jeecg.modules.cusstyle.entity.CusStyleAccessoryInfo;
import org.jeecg.modules.cusstyle.entity.CusStyleElectroplateInfo;
import org.jeecg.modules.cusstyle.entity.CusStyleInfo;
import org.jeecg.modules.cusstyle.entity.CusStyleOtherInfo;
import org.jeecg.modules.cusstyle.entity.CusStyleStoneInfo;
import org.jeecg.modules.cusstyle.entity.CusStyleSuitInfo;
import org.jeecg.modules.cusstyle.entity.CusStyleWorkingProcedure;
import org.jeecg.modules.cusstyle.mapper.CusStyleAccessoryInfoMapper;
import org.jeecg.modules.cusstyle.mapper.CusStyleElectroplateInfoMapper;
import org.jeecg.modules.cusstyle.mapper.CusStyleInfoMapper;
import org.jeecg.modules.cusstyle.mapper.CusStyleOtherInfoMapper;
import org.jeecg.modules.cusstyle.mapper.CusStyleStoneInfoMapper;
import org.jeecg.modules.cusstyle.mapper.CusStyleSuitInfoMapper;
import org.jeecg.modules.cusstyle.mapper.CusStyleWorkingProcedureMapper;
import org.jeecg.modules.cusstyle.service.ICusStyleInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

/**
 * @Description: 款式资料
 * @Date:   2021-09-13
 * @Version: V1.0
 */
@Service
public class CusStyleInfoServiceImpl extends ServiceImpl<CusStyleInfoMapper, CusStyleInfo> implements ICusStyleInfoService {

	@Autowired
	private CusStyleInfoMapper cusStyleInfoMapper;
	@Autowired
	private CusStyleStoneInfoMapper cusStyleStoneInfoMapper;
	@Autowired
	private CusStyleAccessoryInfoMapper cusStyleAccessoryInfoMapper;
	@Autowired
	private CusStyleWorkingProcedureMapper cusStyleWorkingProcedureMapper;
	@Autowired
	private CusStyleElectroplateInfoMapper cusStyleElectroplateInfoMapper;
	@Autowired
	private CusStyleSuitInfoMapper cusStyleSuitInfoMapper;
	@Autowired
	private CusStyleOtherInfoMapper cusStyleOtherInfoMapper;
	
	@Override
	@Transactional
	public boolean saveMain(CusStyleInfo cusStyleInfo, List<CusStyleStoneInfo> cusStyleStoneInfoList,
			List<CusStyleAccessoryInfo> cusStyleAccessoryInfoList,List<CusStyleWorkingProcedure> cusStyleWorkingProcedureList,
			List<CusStyleElectroplateInfo> cusStyleElectroplateInfoList,List<CusStyleSuitInfo> cusStyleSuitInfoList,
			List<CusStyleOtherInfo> cusStyleOtherInfoList) {
		boolean isSuc = cusStyleInfoMapper.insert(cusStyleInfo) > 0 ? true : false;
		if(cusStyleStoneInfoList!=null && cusStyleStoneInfoList.size()>0) {
			for(CusStyleStoneInfo entity:cusStyleStoneInfoList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				entity.setId(null);
				isSuc = cusStyleStoneInfoMapper.insert(entity) > 0 ? true : false;
			}
		}
		if(cusStyleAccessoryInfoList!=null && cusStyleAccessoryInfoList.size()>0) {
			for(CusStyleAccessoryInfo entity:cusStyleAccessoryInfoList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				entity.setId(null);
				isSuc = cusStyleAccessoryInfoMapper.insert(entity) > 0 ? true : false;
			}
		}
		if(cusStyleWorkingProcedureList!=null && cusStyleWorkingProcedureList.size()>0) {
			for(CusStyleWorkingProcedure entity:cusStyleWorkingProcedureList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				entity.setId(null);
				isSuc = cusStyleWorkingProcedureMapper.insert(entity)  > 0 ? true : false;
			}
		}
		if(cusStyleElectroplateInfoList!=null && cusStyleElectroplateInfoList.size()>0) {
			for(CusStyleElectroplateInfo entity:cusStyleElectroplateInfoList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				entity.setId(null);
				isSuc = cusStyleElectroplateInfoMapper.insert(entity)  > 0 ? true : false;
			}
		}
		if(cusStyleSuitInfoList!=null && cusStyleSuitInfoList.size()>0) {
			for(CusStyleSuitInfo entity:cusStyleSuitInfoList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				entity.setId(null);
				isSuc = cusStyleSuitInfoMapper.insert(entity)  > 0 ? true : false;
			}
		}
		if(cusStyleOtherInfoList!=null && cusStyleOtherInfoList.size()>0) {
			for(CusStyleOtherInfo entity:cusStyleOtherInfoList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				entity.setId(null);
				isSuc = cusStyleOtherInfoMapper.insert(entity)  > 0 ? true : false;
			}
		}
		return isSuc;
	}

	@Override
	@Transactional
	public void updateMain(CusStyleInfo cusStyleInfo,List<CusStyleStoneInfo> cusStyleStoneInfoList,List<CusStyleAccessoryInfo> cusStyleAccessoryInfoList,List<CusStyleWorkingProcedure> cusStyleWorkingProcedureList,List<CusStyleElectroplateInfo> cusStyleElectroplateInfoList,List<CusStyleSuitInfo> cusStyleSuitInfoList,List<CusStyleOtherInfo> cusStyleOtherInfoList) {
		cusStyleInfoMapper.updateById(cusStyleInfo);
		
		//1.先删除子表数据
		cusStyleStoneInfoMapper.deleteByMainId(cusStyleInfo.getId());
		cusStyleAccessoryInfoMapper.deleteByMainId(cusStyleInfo.getId());
		cusStyleWorkingProcedureMapper.deleteByMainId(cusStyleInfo.getId());
		cusStyleElectroplateInfoMapper.deleteByMainId(cusStyleInfo.getId());
		cusStyleSuitInfoMapper.deleteByMainId(cusStyleInfo.getId());
		cusStyleOtherInfoMapper.deleteByMainId(cusStyleInfo.getId());
		
		//2.子表数据重新插入
		if(cusStyleStoneInfoList!=null && cusStyleStoneInfoList.size()>0) {
			for(CusStyleStoneInfo entity:cusStyleStoneInfoList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				cusStyleStoneInfoMapper.insert(entity);
			}
		}
		if(cusStyleAccessoryInfoList!=null && cusStyleAccessoryInfoList.size()>0) {
			for(CusStyleAccessoryInfo entity:cusStyleAccessoryInfoList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				cusStyleAccessoryInfoMapper.insert(entity);
			}
		}
		if(cusStyleWorkingProcedureList!=null && cusStyleWorkingProcedureList.size()>0) {
			for(CusStyleWorkingProcedure entity:cusStyleWorkingProcedureList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				cusStyleWorkingProcedureMapper.insert(entity);
			}
		}
		if(cusStyleElectroplateInfoList!=null && cusStyleElectroplateInfoList.size()>0) {
			for(CusStyleElectroplateInfo entity:cusStyleElectroplateInfoList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				cusStyleElectroplateInfoMapper.insert(entity);
			}
		}
		if(cusStyleSuitInfoList!=null && cusStyleSuitInfoList.size()>0) {
			for(CusStyleSuitInfo entity:cusStyleSuitInfoList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				cusStyleSuitInfoMapper.insert(entity);
			}
		}
		if(cusStyleOtherInfoList!=null && cusStyleOtherInfoList.size()>0) {
			for(CusStyleOtherInfo entity:cusStyleOtherInfoList) {
				//外键设置
				entity.setStyleCustomerInfoId(cusStyleInfo.getId());
				cusStyleOtherInfoMapper.insert(entity);
			}
		}
	}

	@Override
	@Transactional
	public void delMain(String id) {
		cusStyleStoneInfoMapper.deleteByMainId(id);
		cusStyleAccessoryInfoMapper.deleteByMainId(id);
		cusStyleWorkingProcedureMapper.deleteByMainId(id);
		cusStyleElectroplateInfoMapper.deleteByMainId(id);
		cusStyleSuitInfoMapper.deleteByMainId(id);
		cusStyleOtherInfoMapper.deleteByMainId(id);
		cusStyleInfoMapper.deleteById(id);
	}

	@Override
	@Transactional
	public void delBatchMain(Collection<? extends Serializable> idList) {
		for(Serializable id:idList) {
			cusStyleStoneInfoMapper.deleteByMainId(id.toString());
			cusStyleAccessoryInfoMapper.deleteByMainId(id.toString());
			cusStyleWorkingProcedureMapper.deleteByMainId(id.toString());
			cusStyleElectroplateInfoMapper.deleteByMainId(id.toString());
			cusStyleSuitInfoMapper.deleteByMainId(id.toString());
			cusStyleOtherInfoMapper.deleteByMainId(id.toString());
			cusStyleInfoMapper.deleteById(id);
		}
	}

	/**
	 * 转生产单
	 */
	@Override
	public boolean convertProdOrder(String id) {
		UpdateWrapper<CusStyleInfo> updateWrapper = new UpdateWrapper<>();
		updateWrapper.eq("id", id);
		CusStyleInfo cusStyleInfo = new CusStyleInfo();
		//0暂存草稿、1待审单、-1审单不通过、2待转生产单、3待开工单、4、待安排做货、10做货中、11部分做货完成、12全部做货完成、20部分出货、21全部出货
		cusStyleInfo.setStatus(3);
		int count = cusStyleInfoMapper.update(cusStyleInfo,updateWrapper);
		return count > 0 ? true : false;
	}
	
	/**
	 * 开工单
	 */
	@Override
	public boolean openWorkOrder(String id) {
		UpdateWrapper<CusStyleInfo> updateWrapper = new UpdateWrapper<>();
		updateWrapper.eq("id", id);
		CusStyleInfo cusStyleInfo = new CusStyleInfo();
		//0暂存草稿、1待审单、-1审单不通过、2待转生产单、3待开工单、4、待安排做货、10做货中、11部分做货完成、12全部做货完成、20部分出货、21全部出货
		cusStyleInfo.setStatus(4);
		int count = cusStyleInfoMapper.update(cusStyleInfo,updateWrapper);
		return count > 0 ? true : false;
	}

	/**
	 * 根据订单号更新所订款式的状态
	 */
	@Override
	public boolean updateStatusByOrderInfoId(String orderInfoId, Integer status) {
		int count = cusStyleInfoMapper.updateStatusByOrderInfoId(orderInfoId, status);
		System.out.println("count====================================="+count);
		return count > 0 ? true : false;
	}
	
}
